package proyecto.ort.edu.uy.dao.impl;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import proyecto.ort.edu.uy.dao.AreaDeTrabajoDAOInterface;
import proyecto.ort.edu.uy.dominio.AreaDeTrabajo;
import proyecto.ort.edu.uy.dominio.Empresa;
import proyecto.ort.edu.uy.dominio.Tarea;
import proyecto.ort.edu.uy.dominio.Usuario;

@Stateless
public class AreaDeTrabajoDAOImpl implements AreaDeTrabajoDAOInterface {

	/**
	 * 
	 */

	@PersistenceContext(unitName = "PrototipoEM")
	private EntityManager em;
	private static final long serialVersionUID = 6207726251483086337L;

	@Override
	public List<AreaDeTrabajo> obtenerTodas() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<AreaDeTrabajo> obtenerTodas(Empresa empresa) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<AreaDeTrabajo> obtenerTodas(Usuario usuario) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<AreaDeTrabajo> obtenerAreasDeTrabajoEmpresa(Usuario usuarioLogueado) {
		String sql = "Select a.lstAreaDeTrabajo from Empresa a where a.idEmpresa = :idEmpresa";
		Query query = this.em.createQuery(sql);

		query.setParameter("idEmpresa", usuarioLogueado.getEmpresa().getIdEmpresa());

		List<AreaDeTrabajo> lstAreaTrabajo = query.getResultList();

		return lstAreaTrabajo;
	}

	/*
	 * public List<AreaDeTrabajo> obtenerAreasDeTrabajoUsuario(Usuario u) {
	 * String sql =
	 * "select a from AreaDeTrabajo a inner join a.lstGrupoUsuarios b where b.idGruposUsuarios in (  select g.idGruposUsuarios from GrupoUsuario g where :usuario member of g.lstUsuariosGrupo)"
	 * ; Query query = this.em.createQuery(sql);
	 * 
	 * query.setParameter("usuario", u);
	 * 
	 * List<AreaDeTrabajo> lstAreaTrabajo = query.getResultList(); return
	 * lstAreaTrabajo; }
	 */

	public List<AreaDeTrabajo> obtenerAreasDeTrabajoUsuario(Usuario u) {
		String sql = "select a from AreaDeTrabajo a inner join a.lstGrupoUsuarios b where b.idGruposUsuarios in (  select g.idGruposUsuarios from GrupoUsuario g where :usuario member of g.lstUsuariosGrupo)";
		Query query = this.em.createQuery(sql);

		query.setParameter("usuario", u);

		List<AreaDeTrabajo> lstAreaTrabajo = query.getResultList();
		return lstAreaTrabajo;
	}

	@Override
	public List<Tarea> obtenerTareasADTUsuario(Usuario usuarioLogueado, AreaDeTrabajo area) {
		String sql = "select a.lstTareas from AreaDeTrabajo a where a.empresa = :empresa and a.idAreaDeTrabajo = :areaTrabajo";
		Query query = this.em.createQuery(sql);

		query.setParameter("empresa", usuarioLogueado.getEmpresa());
		query.setParameter("areaTrabajo", area.getIdAreaDeTrabajo());
		List<Tarea> lstTareas = query.getResultList();
		return lstTareas;
		// TODO Auto-generated method stub
	}

	@Override
	public List<Tarea> obtenerTareasUsuario(Usuario usuarioLogueado) {
		// TODO Auto-generated method stub
		String sql = "select a.lstTareas from AreaDeTrabajo a where a.empresa = :empresa";
		Query query = this.em.createQuery(sql);

		query.setParameter("empresa", usuarioLogueado.getEmpresa());
		List<Tarea> lstTareas = query.getResultList();
		return lstTareas;
	}

	@Override
	public void actualizar(AreaDeTrabajo adt) {
		this.em.merge(adt);
	}

	@Override
	public void guardar(AreaDeTrabajo adt) {
		this.em.persist(adt);
	}

}
